#ifndef LOGIN_H
#define LOGIN_H

#include <QWidget>
#include <QDir>
#include <QDebug>
#include <QTimer>
#include <QSettings>
#include <QMessageBox>
#include <QWebSocket>
#include <QJsonObject>
#include <QByteArray>
#include <QJsonDocument>
#include <QStandardPaths>
#include <QRegularExpressionValidator>
#include "Register.h"
#include "FindPwd.h"

namespace Ui {
class Login;
}

class Login : public QWidget
{
    Q_OBJECT

public:
    explicit Login(QWidget *parent = nullptr);
    ~Login();
    void initUI();// 初始化Ui界面
    void initSettings();// 初始化配置文件
    void initConnect();// 连接服务器
    void sendJsonToServer(QJsonObject& jsonObj);
    void setEnableUI(bool flag);// 设置登录窗口的部分ui的使能
    void saveAvatar(QPixmap avatar);// 当登录成功后，将头像保存到本地目录
    QWebSocket* getSocket();

    // 处理来自服务端的消息
public:
    void dealRegister(const QJsonObject& jsonObj);
    void dealLogin(const QJsonObject& jsonObj);
    void dealFindPwdStep1(const QString& reply, const QString& safeQ);
    void dealFindPwdStep2(const QString& reply);
    void dealFindPwdStep3(const QString& reply);

public slots:
    void onConnected();// 与服务端的连接成功信号的槽函数
    void onDisconnected();// 与服务端主动断开连接信号的槽函数
    void onTextMessageRecrived(const QString &message);// 收到服务端消息的槽函数
    void onRegisterData(QJsonObject& jsonObj);// 收到注册界面发来的数据
    void onFindPwdStep1(const QString& id);// 收到找回密码第一步（检查账户、索要密保问题）
    void onFindPwdStep2(const QString& id,const QString& safeA);// 收到找回密码第二步（检查密保答案）
    void onFindPwdStep3(const QString& id,const QString& pwd);// 收到找回密码第三步（更新密码）


private slots:
    void on_registerBtn_clicked();// 点击了注册按钮
    void on_loginBtn_clicked();// 点击了登录按钮
    void on_findPwdBtn_clicked();// 点击了找回密码按钮
    void on_autoLoginCheckBox_checkStateChanged(const Qt::CheckState &arg1);

signals:
    void loginSucceed(QString id);// 登录成功时，发送给main函数转换窗口
    void findPwdStep1(const QString reply, const QString safeQ);// 收到找回密码第一步（检查账户、索要密保问题）
    void findPwdStep2(const QString reply);// 收到找回密码第二步（检查密保答案）

private:
    Ui::Login *ui;
    QWebSocket* m_socket;// 保存自身的套接字
    QSettings* m_settings;// 存储是否记住密码、自动登录、账号密码信息
};

#endif // LOGIN_H
